<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Document</title>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script>
</head>

<body>
  <div id="app">
    <!-- 使用组件 -->
    <App />
  </div>
  <script>
    Vue.config.productionTip = false;

    // 创建组件 Vue.extend({}) extend方法接收一个配置对象
    const App = Vue.extend({
      // 组件内的配置是独立的 没有el  但最终都会被放在vm实例上被渲染在vm模板上
      template: `
          <div>
            <h1>App组件{{count}}</h1> 
            <button @click="changeCount">累加</button>
          </div>
        `,
      data () {
        return {
          count: 0,
        };
      },
      methods: {
        changeCount () {
          //组件中事件函数的this指向的是当前组件的实例对象
          console.log(this, "this");
          this.count++;
        },
      },
    });
    /* 
      Vue.extend方法返回一个VueComponent的构造函数,当这个组件被注册并使用的时候会实例化得到一个组件实例(组件实例化对象)
    */
    console.log(App, "App");

    const vm = new Vue({
      el: "#app",
      data () {
        return {};
      },
      // 注册组件
      components: {
        App,
      },
    });
  </script>
</body>

</html>